#include <head.h>

pthread_mutex_t mutex;
pthread_cond_t cond;
int ready = 0; // 全局标志，表示某个条件是否满足

void *wait_thread(void *arg)
{
    pthread_mutex_lock(&mutex);
    while (!ready)
    {
        printf("线程 %d 等待条件满足...\n", *(int *)arg);
        pthread_cond_wait(&cond, &mutex); // 等待条件变量
    }
    printf("线程 %d 条件满足，继续执行...\n", *(int *)arg);
    pthread_mutex_unlock(&mutex);
    return NULL;
}

void *signal_thread(void *arg)
{
    pthread_mutex_lock(&mutex);
    ready = 1; // 修改条件
    printf("线程 %d 发送条件满足信号...\n", *(int *)arg);
    pthread_cond_signal(&cond); // 发出条件满足信号
    pthread_mutex_unlock(&mutex);
    return NULL;
}

int main()
{
    pthread_t thread1, thread2;
    int thread1_id = 1, thread2_id = 2;

    // 初始化互斥锁和条件变量
    pthread_mutex_init(&mutex, NULL);
    pthread_cond_init(&cond, NULL);

    // 创建两个线程，一个等待条件，一个发送信号
    pthread_create(&thread1, NULL, wait_thread, &thread1_id);
    sleep(1); // 确保等待线程先运行
    pthread_create(&thread2, NULL, signal_thread, &thread2_id);

    // 等待线程结束
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    // 销毁互斥锁和条件变量
    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&cond);

    printf("程序结束\n");
    return 0;
}
